#ifndef __SQLITE3_OPERATE_H__
#define __SQLITE3_OPERATE_H__

/*flags参数有如下标志：
SQLITE_OPEN_NOMUTEX: 设置数据库连接运行在多线程模式(没有指定单线程模式的情况下)
SQLITE_OPEN_FULLMUTEX：设置数据库连接运行在串行模式。
SQLITE_OPEN_SHAREDCACHE：设置运行在共享缓存模式。
SQLITE_OPEN_PRIVATECACHE：设置运行在非共享缓存模式。
SQLITE_OPEN_READWRITE：指定数据库连接可以读写。
SQLITE_OPEN_CREATE：如果数据库不存在，则创建。

double sqlite3_column_double(sqlite3_stmt*, int iCol);                  // 浮点数据
int sqlite3_column_int(sqlite3_stmt*, int iCol);                        // 整型数据
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);            // 长整型数据
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);               // 二进制文本数据
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);      // 字符串数据
*/

#include <sqlite3.h>
#include <jsoncpp/json/json.h>
#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

class SqliteBridge{
    public:
        SqliteBridge(string& file_path);
        ~SqliteBridge();

        /**
         * @description: 打开数据库, 注意开启和关闭必须成对
         * @param {string&} file_path
         * @return {*}
         */
        bool Open(string& file_path);

        /**
         * @description: 关闭数据库
         * @return {*}
         */
        void Close();

        /**
         * @description: 执行语句
         * @param {string} sql_cmd
         * @return {*}
         */
        Json::Value Execute(string sql_cmd);

        /**
         * @description: 封装完整的数据指令执行
         * @param {string} sql_cmd
         * @return {*}
         */
        Json::Value Sqlite3Exec(string sql_cmd);

        /**
         * @description: 数据库字段检测
         * @param {string} table_name
         * @return {*}
         */
        vector<pair<string,string>> TableInfo(string table_name);


        /**
         * @description: 数据库表名称列表
         * @return {*}
         */
        vector<string> TableNames();

    private:
        sqlite3* __sqlite_db = nullptr;
        sqlite3_stmt* __sqlite_stmt = nullptr;
        string __db_filepath;

};


#endif